import axios from 'axios'

// 基础URL，用于构建HTTP请求的地址
const baseUrl = '/api'

/**
 * HttpRequest类用于封装axios实例，提供方便的HTTP请求方法
 * @constructor
 * @param {string} baseUrl - 请求的基础URL
 */
class HttpRequest {
  constructor(baseUrl) {
    this.baseUrl = baseUrl
  }

  /**
   * 获取内部配置对象
   * @returns {Object} - 包含baseUrl和header的配置对象
   */
  getInsideConfig() {
    const config = {
      baseUrl: this.baseUrl,
      header: {},
    }
    return config
  }

  /**
   * 配置axios实例的请求和响应拦截器
   * @param {Object} instance - axios实例
   */
  interception(instance) {
    // 添加请求拦截器
    // 添加请求拦截器
    instance.interceptors.request.use(
      function (config) {
        // 在发送请求之前做些什么
        return config
      },
      function (error) {
        // 对请求错误做些什么
        return Promise.reject(error)
      }
    )

    // 添加响应拦截器
    // 添加响应拦截器
    instance.interceptors.response.use(
      function (response) {
        // 2xx 范围内的状态码都会触发该函数。
        // 对响应数据做点什么
        return response
      },
      function (error) {
        // 超出 2xx 范围的状态码都会触发该函数。
        // 对响应错误做点什么
        return Promise.reject(error)
      }
    )
  }

  /**
   * 发起HTTP请求
   * @param {Object} options - 请求配置选项
   * @returns {Promise} - 返回axios请求的Promise对象
   */
  request(options) {
    options = { ...this.getInsideConfig(), ...options }
    const instance = axios.create()
    this.interception(instance)
    return instance(options)
  }
}

const baseRequest = new HttpRequest(baseUrl)

// 导出默认的HttpRequest实例，该实例用于发起HTTP请求
export default baseRequest
